package org.gnyxy.utils;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public final class WebSocketUtils {
    // 定义一个静态常量logger，用于记录日志，提供日志记录的详细功能。

    // 定义一个存储WebSocket会话的静态ConcurrentHashMap，用于在线用户的会话管理。
    // 键为用户的唯一标识，值为对应的WebSocket会话实例。
    public static final Map<String, Session> ONLINE_USER_SESSIONS = new ConcurrentHashMap<>();

    /**
     * 向指定的WebSocket会话发送消息。
     * @param session 用户会话，用于指定消息的接收者。
     * @param message 要发送的消息内容，类型为字符串。
     */
    public static void sendMessage(Session session, String message) {
        // 如果会话为空，则不执行任何操作，直接返回。
        if (session == null) {
            return;
        }
        // 获取会话的远程端点，并检查是否为null。
        final RemoteEndpoint.Basic basic = session.getBasicRemote();
        if (basic == null) {
            return;
        }
        try {
            // 通过远程端点发送文本消息，将消息内容发送到接收端。
            basic.sendText(message);
        } catch (IOException e) {
            // 记录异常日志，级别为error。
            log.error("sendMessage IOException ",e);
        }
    }

    /**
     * 向所有在线用户发送消息。
     * @param message 要发送的消息内容，类型为字符串。
     */
    public static void sendMessageAll(String message) {
        // 遍历在线用户会话的映射，对每个会话发送消息。
        ONLINE_USER_SESSIONS.forEach((sessionId, session) -> sendMessage(session, message));
    }
}